#ifndef SERVIDOR_H_
#define SERVIDOR_H_

#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <netinet/in.h>
#include <list>
#include <map>
#include <iostream>

#include "Socket.h"
#include "Curso.h"
#include "Clase.h"
#include "Mutex.h"
#include "AtencionUsuario.h"

class Servidor {
	Mutex mutexClase;
	Mutex mutexCurso;
	Socket *escucha, *sock_av;
	struct sockaddr_in addr, addr_av;
	std::list<AtencionUsuario*> atencion_usuarios;
	std::list<AtencionUsuario*>::iterator it;
	std::list<Socket*> socket_conectados;
	// Clases individuales
	std::map<unsigned int, Clase*> clases;
	// Cursos
	std::map<unsigned int, Curso*> cursos;
	std::ifstream arch_usuarios;

public:
	Servidor(char* puerto, char* puerto_av);
	void ejecutar();
	virtual ~Servidor();
};

#endif
